www.gusucode.com > VC++ 汽配销售管理系统(Access)源码程序 > VC++ 汽配销售管理系统(Access)源码程序/源码/RxRecordset.cpp
//Download by http://www.NewXing.com // RxRecordset.cpp: implementation of the RxRecordset class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "qpglxt.h" #include "RxRecordset.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// RxRecordset::RxRecordset() { } RxRecordset::~RxRecordset() { } CString RxRecordset::GetFieldValue(CString Field) { CString sValue; _variant_t value; value=rst->GetCollect((_bstr_t)Field); if(value.vt==VT_EMPTY ||value.vt==VT_NULL) sValue=""; else { sValue=(char*)(_bstr_t)value; sValue.TrimRight(); sValue.TrimLeft(); } return sValue; } bool RxRecordset::Open(CString srecordset, UINT adCmd) { if(adCmd==adCmdTable) sRecordset=srecordset; else sRecordset="("+srecordset+") DERIVEDTBL"; try{ rst=cnn->Execute((_bstr_t)srecordset,NULL,adCmd); } catch(_com_error&e) { this->GetErrors(e); return false; } return true; } int RxRecordset::GetRecordCount() { int nCount=0; try{ rst->MoveFirst(); } catch(...) { return 0; } if(rst->_EOF) return 0; while (!rst->_EOF) { rst->MoveNext(); nCount=nCount+1; } rst->MoveFirst(); return nCount; } bool RxRecordset::MoveFirst() { try{ rst->MoveFirst(); } catch(_com_error&e) { this->GetErrors(e); return false; } return true; } bool RxRecordset::MoveNext() { try{ rst->MoveNext(); } catch(_com_error&e) { this->GetErrors(e); return false; } return true; } bool RxRecordset::MoveLast() { try{ rst->MoveLast(); } catch(_com_error&e) { this->GetErrors(e); return false; } return true; } bool RxRecordset::MovePrevious() { try{ rst->MovePrevious(); } catch(_com_error&e) { this->GetErrors(e); return false; } return true; } bool RxRecordset::Move(int nRecordNumber) { try{ rst->MoveFirst(); rst->Move(nRecordNumber); } catch(_com_error&e) { this->GetErrors(e); return false; } return true; } int RxRecordset::GetFieldCount() { int count; try{ count=rst->GetFields()->GetCount(); } catch(...) { return -1; } return count; } _RecordsetPtr RxRecordset::GetRecordset() { return rst; } void RxRecordset::GetErrors(_com_error eErrors) { CString string; CFile file; file.Open("Error.Rxe",CFile::modeWrite|CFile::modeNoTruncate); ErrorsPtr pErrors=cnn->GetErrors(); if (pErrors->GetCount()==0) { string=(char*)(_bstr_t)eErrors.ErrorMessage(); file.Write(string+"\r\n",string.GetLength()+1); //::AfxMessageBox(string); } else { for (int i=0;i<pErrors->GetCount();i++) { _bstr_t desc=pErrors->GetItem((long)i)->GetDescription(); string=(char*)desc; file.Write(string+"\r\n",string.GetLength()+1); //::AfxMessageBox(string); } } file.Close(); } void RxRecordset::Close() { rst->Close(); } CString RxRecordset::GetFieldName(int nNumber) { CString sName; _variant_t vName; try{ vName=rst->GetFields()->GetItem((long)nNumber)->GetName(); } catch(_com_error&e) { GetErrors(e); return ""; } if(vName.vt==VT_EMPTY) return ""; sName=(char*)(_bstr_t)vName; sName.TrimLeft(); sName.TrimRight(); return sName; } CString RxRecordset::GetSQL() { return sRecordset; } CString RxRecordset::GetFieldType(int nNumber) { ADODB::DataTypeEnum type; CString sType; try{ rst->GetFields()->GetItem((long)nNumber)->get_Type(&type); } catch(_com_error&e) { GetErrors(e); return adError; } ADODB::DataTypeEnum tp[]={adBigInt,adBinary,adBoolean,adCurrency,adDecimal,adDouble,adInteger,adLongVarBinary,adNumeric,adSingle,adSmallInt,adTinyInt,adUnsignedBigInt,adUnsignedInt,adUnsignedSmallInt,adUnsignedTinyInt,adVarBinary,adBSTR,adChar,adLongVarChar,adLongVarWChar,adVarChar,adVarWChar,adWChar,adDate,adDBDate,adDBTime,adDBTimeStamp}; for(int i=0;i<28;i++) { if(type==tp[i]) break; if(i==27) return "未知类型"; } if(i<18) sType="数值型"; if(i>=18 && i<25) sType="字符型"; if(i>=25 && i<29) sType="日期型"; return sType; }